/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package agenda;

import java.io.File;
import java.io.FileNotFoundException;
import java.text.ParseException;
import java.util.List;

/**
 * Interfaccia che definisce dei metodi standard per la gestione di un database per la rubrica.
 *
 * @author manu
 */
public interface DatabaseManager<T> {
    
        public static enum SearchLocation {
        Nome, Cognome, Azienda, eMail
    };

    /* ritorna un insieme contenente tutte le voci della rubrica presenti nel DB */
   List<T> getAllEntries();

   /* aggiunge una voce al DB */
   void addEntry(T entry);

   /* apre il database indicato dal path 'f'.
    * rimane compito del database gestire tutti i casi di errore, perché questo metodo
    * non ritorna nulla.
    *
    * Lunico modo in cui il DB può avvertire di un eventuale errore è lanciando una delle due eccezioni
    * indicate
    */
   void openDB(File f) throws FileNotFoundException, ParseException;

   /* Salva i dati, chiude il DB e rilascia le risorse */
   void closeDB();
   
   /* esegue una ricerca TODO*/
   List<T> search(String s, boolean caseSens, SearchLocation loc );
   
   /* esegue una ricerca considerando ila stringa da cercare come prefisso */
   List<T> prefixSearch(String s, boolean caseSens, SearchLocation loc );

}
